home *** CD-ROM | disk | FTP | other *** search
- Signal Processing Packages and Notebooks
- for the Mathematica Environment
-
- Brian Evans and James McClellan
- Digital Signal Processing Group
- School of Electrical Engineering
- Georgia Institute of Technology
- Atlanta, GA 30332-0250
-
- E-MAIL: evans@eedsp.gatech.edu
-
-
- Since the version of the signal processing packages released by
- The Mathematica Journal, I have made changes to every file. The
- following highlights those changes. The packages work simultaneously
- under Mathematica 1.2 and 2.0. Under Mathematica 2.0, evaluating
- Needs[ "SignalProcessing`Master`" ] tells Mathematica where to find all
- of the new routines so that they can be automatically loaded when
- referenced.
- When routines load, their 1-D definitions are evaluated.
- If multidimensional features are requested, then those definitions
- would be automatically loaded. This decoupling means that undergraduates
- using the extensions would need less memory. For example, one-dimensional
- and separable multidimensional z-transforms require 1/3 less memory.
-
-
- --> Integration
-
- o Integration rules for Delta functions are now covered by DeltaIntegrate.
- Users can customize them by attaching rules to DeltaIntegrate
- (but first you will need to unprotect it).
- o Integration is now more robust for expressions involving continuous
- step (CStep) functions and continuous pulse (CPulse) forms.
-
- --> Expression Simplification
-
- o Added SPSimplify which applies simplification rules for signal
- processing expressions. It supports a dialogue option:
- Dialogue -> False no justification
- Dialogue -> True some justification
- Dialogue -> All complete justification
- o You can specify a list of symbols to treat as variables to
- SPSimplify by using the Variables option.
- o SPSimplify supports the same options as Simplify does
-
- --> New Plotting Routines
-
- o SignalPlot plots the real and imaginary components of a 1-D function
- simultaneously on the same plot, as well as Dirac delta functions.
- The variable $DeltaFunctionScaling directs how Dirac delta functions
- are to be plotted. A value of None means that the height of all Dirac
- delta functions will be equal to the maximum value of the plot. A
- value of Scaled means that the height of Dirac delta functions will
- be proportional to their area. SignalPlot also plots 2-D signals.
- o SequencePlot which plots 1-D and 2-D discrete-time expressions
- o RootLocus plots a root locus for one varying parameter
- o All new plotting routines support the same options as does Plot.
- o PoleZeroPlot shades the region of convergence for s-domain plots.
- o When an invalid region of convergence (ROC) is given to PoleZeroPlot,
- it will display the union of all possible ROC's.
-
- --> Convolution
-
- o Either "function" argument can be a list of F-intervals or a
- function in algebraic form
- o Discrete and continuous convolution is performed by PiecewiseConvolution
- which calls either CTPiecewiseConvolution or DTPiecewiseConvolution
- depending on the value of the Domain option (Discrete or Continuous).
- The default domain is the value of $ConvolutionDomain.
- o The discrete linear convolution operator is represented by Convolve[n]
- and the continuous linear convolution operator is denoted CConvolve[t].
- These are merely representations of operations used by the transform
- rules bases; that is, they do not actually perform convolution.
-
- --> Transforms
-
- o All transform rule bases can justify their answers. The level
- of justification is set by the Dialogue option (see above).
- o The transform rule bases recognize convolution and summation operators
- o The inverse z- and Laplace transforms rely on Mathematica's
- partial fractions routine Apart which is not robust. I have
- written MyApart which will be used by the transform rule bases
- whenever Apart does not finish the decomposition. By default, MyApart
- will root denominators higher than 5th-order numerically.
- o The forward z-transform handles multidimensional downsampling and
- upsampling operations.
- o The inverse DTFT recognizes transforms that are multidimensionally
- upsampled in the discrete-time domain.
- o The forward and inverse continuous-time Fourier transforms
- use the same set of rules by exploiting the duality property.
- o The Fourier transforms handle infinite impulse trains (represented as
- either Summation[n,-Infinity,Infinity,1][Delta[t + n T]] or
- Periodic[T,t][Delta[t]]). Aspects of sampling theory can now be shown.
- o The forward discrete-time Fourier transforms explicitly track
- periodicities of frequency responses.
- o All of the transform rule bases support an option called Definition.
- If True, then the rule base will apply the definition of the transform
- (using Mathematica's built-in routines for symbolic integration or
- symbolic summation) if all other attempts at the transform have failed.
- o Regardless of the value of the Dialogue option, the transform
- rule bases will keep track of the assumptions made on the free
- parameters. They can be retrieved at any time by evaluating
- Assuming[All]. The set of conditions can be cleared by
- evaluating Assuming[].
- o New operator called CircularShift which is an abstract form of
- the primitive RotateRight. It was introduced because of the
- new DFT transform pairs written into the DFT rule bases.
- o I have idiot-proofed the transform rule bases. So, if you typed
- something like LaPlace[ CStep[t], t s ] it would complain about
- t s because you meant t, s. This should help new users.
- o The TransformLookup option for the transform rule bases allows one
- to specify additional transform pairs. This is useful when a trans-
- form rule base does not contain a pair that you need. It is also
- useful for transforming abstract functions (i.e., saying that x[n]
- becomes X[z]). For example,
-
- In:= ZTransform[a^n x[n], n, z, TransformLookup -> { x[n] :> X[z] }]
- Out= ZTransData[ X[a z], Rminus[0], Rplus[Infinity], ZVariables[z] ]
-
- In:= ZTransform[a^n x[n], n, z,
- TransformLookup -> { x[n] :> { X[z], rm, rp } } ]
- Out= ZTransData[ X[a z], Rminus[rm], Rplus[rp], ZVariables[z] ]
-
- These transform pairs override the pairs in the transform rule bases.
- The multidimensional case is a natural extension:
-
- In:= ZTransform[ Upsample[l1,n1][ Upsample[l2,n2][ x[n1,n2] ] ],
- {n1,n2}, {z1, z2},
- TransformLookup -> { x[n1,n2] :> X[z1,z2] } ]
- l1 l2
- Out= ZTransData[ X[z1 , z2 ], Rminus[{0, 0}],
- Rplus[{Infinity, Infinity}], ZVariables[{z1, z2}] ]
-
- --> Filters
-
- o CFIR and CIIR structures have an optional third argument: Roots -> roots.
- This argument can be used in lieu of a coefficient list so that a user
- may specify filters in terms of their poles and zeroes. For example,
- CIIR[t, Roots -> {-1, -2, -3}] gives CIIR[t, {6, 11, 6, 1}].
- o The time responses of analog filters can now be plotted
- o Computational objects for IIR structures, called IIRFunction, now exist.
- Also, FIR structures can be rewritten as a formula. Their values
- can now be plotted. Values are calculated as they are needed, and
- IIRFunction remembers (caches) previous calculations.
-
- --> Difference/Differential Equation Solvers
-
- o ZSolve and LSolve solve difference and differential equations,
- respectively. They can justify their answers in the same way
- as the transforms do according to the level of Dialogue (see above).
-
- --> Stability Checking
-
- o Stable will resolve stability of non-separable signals more often
- (e.g., Stable will return False when applied to the z-transform of
- (1/2)^n1 (4/5)^n2 Multinomial[n1,n2] Step[n1,n2]
- instead of an unresolved expression.)
-
- --> Lattice Theory
-
- o The routines supporting the rules for multirate multidimensional
- signal processing (i.e., lattice and integer matrix theory) have
- been gathered in "Multirate.m" in the Support directory, including
- "DistinctCosetVectors", "SmithNormalForm", and "SmithReducedForm".
- o Added the functions ColumnHermiteForm and RowHermiteForm as well as
- LCLM, LCRM, GCRD, and GCLD.
- o Added the number theoretic EuclidFactors to complement the routine
- BezoutNumbers. BezoutNumbers finds integers mu and lambda given
- integers a and b such that
-
- a mu + b lambda == gcd(a,b)
-
- (BezoutNumbers calls the Mathematica primitive ExtendedGCD.)
- EuclidFactors finds the integers mu and lambda given relatively
- prime integers p and q and any integer k so that
-
- p mu + q lambda == k
-
- EuclidFactors also works when p and q are integer matrices (in
- which case mu, lambda, and k become integer vectors).
- o Added UpsampledSystem and ReorderResampling to help detect
- resampled relationships among variables in an expression
-
- --> Changes to Mathematica Primitives
-
- o Integrate so that it can handle generalized functions like the
- Dirac delta (Delta) and functions with discontinuities like
- continuous-time step (CStep) and pulse (CPulse) functions.
- o Simplify applied to an And expression removes redundant conditions
- o Det of a number is that number
- o Dot product of two numbers is the product of the two numbers
- o The TeX forms of Re and Im primitives are Re and Im instead of
- R and I.
-
-